home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / LANG / ADA / GNAT / !gcc / gnat / gnatinfo < prev    next >
Text File  |  1996-02-12  |  75KB  |  1,697 lines

  1. ------------------------------------------------------------------------------
  2. --                                                                          --
  3. --                              GNAT DOCUMENTS                              --
  4. --                                                                          --
  5. --                                I N T R O                                 --
  6. --                                                                          --
  7. --                            $Revision: 1.81 $                             --
  8. --                                                                          --
  9. --     Copyright (C) 1992,1993,1994,1995 Free Software Foundation, Inc.     --
  10. --                                                                          --
  11. -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  12. -- terms of the  GNU General Public License as published  by the Free Soft- --
  13. -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
  14. -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
  15. -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
  16. -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
  17. -- for  more details.  You should have  received  a copy of the GNU General --
  18. -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
  19. -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
  20. -- MA 02111-1307, USA.                                                      --
  21. --                                                                          --
  22. -- GNAT was originally developed  by the GNAT team at  New York University. --
  23. -- It is now maintained by Ada Core Technologies Inc (http://www.gnat.com). --
  24. --                                                                          --
  25. ------------------------------------------------------------------------------
  26.  
  27. Contents.
  28. ---------
  29.    Running GNAT.
  30.    A small example.
  31.    Gnatbl.
  32.    Using the binder.
  33.    Using gcc to compile.
  34.    Using gcc for syntax checking.
  35.    Using gcc for semantics checking.
  36.    Search Paths and the Run Time Library (RTL).
  37.    Options.  
  38.    Gnatmake.
  39.    Smart gnatmake.
  40.    Constraint Checking and Pragma Suppress.
  41.    Software Overflow Checking.
  42.    Order of Compilation Issues.
  43.    File Name Rules.
  44.    Gnatk8.
  45.    Compiling Files With Several Compilation Units.
  46.    Cross Reference Tool.
  47.    Implementation of Intrinsic Functions.
  48.    Getting Internal Debugging Information.
  49.    When GNAT crashes.
  50.    Using gdb.
  51.    GNAT specific pragmas.
  52.    pragma Source_File_Name.
  53.    Performance Considerations.
  54.    New WARNING messages related to accessibility checks and private packages
  55.    Features supported/unsupported.
  56.    Files.
  57.    Ada Mode for Emacs.
  58.    Copyright considerations.
  59.    How to get in touch with us.
  60.    Schedule.
  61.    A short gnat paper.
  62.    Ada information resources on the Internet.
  63.    The GNAT development team.
  64. ------------------------------------------------------------------------------ 
  65.  
  66. Running GNAT.
  67. -------------
  68. Three steps are needed to create an executable file from an Ada source file:
  69. it must first be compiled, it then must go through the gnat binder, and then
  70. all appropriate object files it needs are then linked together to produce an
  71. executable.  A tool has been provided to combine the last 2 steps into one
  72. command.
  73.  
  74. A small example.
  75. ----------------
  76.  
  77. The file hello.adb contains the source of our modest version of the
  78. "Hello World" program.  Other components of this program are contained
  79. in the GNAT Runtime Library (RTL).  You needn't mention the files
  80. containing these other components but you can find the sources (g-io.ads,
  81. g-io.adb, and a-cio.c) in the RTL source directory (described below).
  82.  
  83. The file hello.adb can be found in the current distribution in the examples
  84. directory.  Here are the commands for building and running it (Since this
  85. documentation is for systems running Unix and also for those running DOS,
  86. IBM OS/2 2.x and Windows NT, in places where the instructions differ a prefix
  87. "Unix:" or "OS/2:" or "DOS:" indicates what is relevant for each system):
  88.  
  89.             gcc -c hello.adb
  90.       Unix: gnatbl -o hello hello.ali
  91.       OS/2: gnatbl -o hello.exe hello.ali
  92.       DOS : gnatbl -o hello.exe hello.ali
  93.  
  94. create the executable called "hello" or "hello.exe" in your current directory.
  95.  
  96. In the example above, gnatbl calls the binder and creates a file b_hello.c
  97. which contains among things the calls to the necessary elaboration procedures.
  98. b_hello is then compiled and linked with all the other object files. After the
  99. link is completed, both b_hello.c and b_hello.o (b_hello.obj) are removed by
  100. default. If -g was specified on the call to gnatbl, the two files are not
  101. removed since it is assumed they might be required for debugging.
  102.  
  103. (Note that the operation of the DOS version of gnatbl changed with GNAT 2.00.
  104. Previously the file hello (no extension) was created.  The extra step of 
  105. running coff2exe has now been incorporated into gnatbl.  In order to lessen 
  106. the proliferation of normally unused files, the extensionless coff version 
  107. is automatically deleted.  If you need it, for example for debugging, it can 
  108. be recreated by running exe2coff.)
  109.  
  110. Typing
  111.  
  112.       hello
  113.  
  114. will allow you to verify that the system is alive and willing to enter into 
  115. a primitive dialogue.
  116.  
  117. The gcc switch -c indicates that we only want to compile, not link. The gnatbl
  118. step produces the executable by means of calling the GNAT binder, compiling
  119. its output, and calling gcc with the needed object files and libraries to
  120. link the executable.  The -o switch is passed to the linker to name the
  121. resulting executable file.
  122.  
  123. As the example suggests, the gcc command recognizes the extension .adb as
  124. an indication of an Ada source file and calls the appropriate programs
  125. to generate an object file (hello.o or hello.obj) and an Ada Library
  126. Information (ALI) file (hello.ali) containing dependency information used
  127. by the binder to verify consistency and determine order of elaboration.
  128. The "ali" extension is recognized by gnatbl as the ALI file of the main
  129. procedure or function, and gnatbl uses it to create a file called the
  130. bind file, and to gather all the needed object files for linking.
  131.  
  132.  
  133. Gnatbl
  134. -----
  135.   gnatbl
  136.        [-o exec_name]
  137.        [-v]                  -- verbose mode
  138.        [-g]                  -- include debugging information
  139.        [-linkonly]           -- doesn't call the binder
  140.        [-gnatbind name]      -- full name for gnatbind
  141.        [-gnatlink name]      -- full name for the linker (gcc)
  142.        [list of objects]     -- non Ada binaries
  143.        [linker options]      -- other options for the linker
  144.  
  145. The program gnatbl provides for binding and linking using the GNAT RTL.
  146. Gnatbl calls gnatbind which creates a C file (b_hello.c in our
  147. simple example) containing calls to all of the elaboration routines.
  148. Gnatbind is described more fully below.  The typical use of GNAT (currently
  149. -- in the presence of gnatbl) to construct a program consisting of a mix
  150. of Ada and C sources is to compile all of the sources using "gcc -c" to
  151. generate object (.o or .obj) files.  In the case of Ada sources, ALI files
  152. with the extension .ali are also produced.  Then gnatbl is used to construct
  153. the executable.  All arguments to gnatbl are simply passed through to gcc
  154. to link the objects together, with the exception of a file name with the
  155. .ali extension.  Such an argument is presumed to be the ALI file of the
  156. main procedure of the program.  When gnatbl sees a .ali file it calls gnatbind
  157. to create the bind file, compiles the bind file, extracts a list of needed
  158. object files from the bind file, and replaces the .ali argument with the
  159. a list of object files (the result of compiling the bind file and the list
  160. extracted from the bind file) in the gcc command it makes.  As a quick
  161. illustration consider a program comprising main.adb, foo.adb and bar.c.
  162. After compiling these sources into object files, the command (under Unix)
  163.  
  164. gnatbl -o main main.ali bar.o
  165.  
  166. would cause gnatbl to:
  167.   call "gnatbind main.ali", generating b_main.c
  168.   call "gcc -c b_main.c"
  169.   call "gcc -o main b_main.o main.o foo.o bar.o (+ gnat library args)"
  170.  
  171. In the last step, the "main.ali" argument has been replaced by all of the
  172. object files needed by main (the binder file, main itself, and foo -- upon
  173. which main depends). All other gnatbl arguments are passed through unchanged
  174. to gcc.  Finally a -l and a -L argument are added to the end of the gcc call
  175. to point it to the gnatlib library.  (Under OS/2, the command line and
  176. behavior of gnatbl is similar.)  (Under DOS, the additional step of calling
  177. "coff2exe main" is done.)
  178.  
  179. A current limitation of gnatbl is that the main program must be Ada and that
  180. it depends on all of the necessary library units.  In other words, there can
  181. be only one .ali file listed and it must be the main program. This
  182. particularly restricts gnatbl's use when a routine written in another language
  183. calls an Ada subprogram which is not also called from Ada.
  184.  
  185. [-o exec_name]
  186.   Under unix if the -o option is omitted the executable is called the name of
  187.   the main unit. So "gnatbl try.ali" will create an executable called try.
  188.   Under DOS and OS/2 it would create an exectuable called try.exe.
  189.  
  190. [-v]
  191.   The verbose option is most useful when the user wants to see what set of
  192.   object files that are being used in the link step.
  193.  
  194. [-g]
  195.   The option to include debugging information causes the C bind file, i.e.
  196.   b_foo.c, to be compiled with -g. In addition the b_foo.c and b_foo.o file
  197.   will not be removed (without -g the default action is to remove the binder
  198.   generated files). Additionally on DOS, it causes the COFF output file to
  199.   be preserved and on Windows NT causes extra debugging information to be
  200.   linked into the executable.
  201.  
  202. [-linkonly]           -- doesn't call the binder
  203.   Do not call gnatbind but rather use the bind file that has already been
  204.   generated. This option is useful if the user wants to pass options to
  205.   gnatbind which is not directly possible with gnatbl. The sequence would be:
  206.   
  207.   gnatbind binder_options file.ali
  208.   gnatbl -linkonly file.ali
  209.  
  210. [-gnatbind name]      -- full name for gnatbind
  211.   Allows the user to specify the full path of the gnatbind executable that
  212.   gnatbl should use rather than the default one on the path.
  213.  
  214. [-gnatlink name]      -- full name for the linker (gcc)
  215.  
  216. Using the Binder.
  217. -----------------
  218.  
  219. In the "Hello World" example, if gnatbl were not used, the second step
  220. would have been to call the binder directly with the command:
  221.  
  222.        gnatbind hello.ali
  223.  
  224. This command generates a file named b_hello.c which needs to be compiled and
  225. linked together with hello.o (or hello.obj).  The file b_hello.c contains
  226. a program which contains calls to all of the elaboration routines of all
  227. of the units required by the subprogram whose ALI file is given on the command
  228. line.  Then it calls the Ada subprogram itself.  By default, this C function
  229. is called "main".  (For other options, see the section on options below.)
  230. The program gnatbind works by recursively processing the ALI files of all
  231. of the units that are needed.  These ALI files are found using the search
  232. path mechanism described below.  Since object and ALI files are always
  233. kept together, the object files needed for linking are found at the same
  234. time and are listed in a comment at the end of the bind file.  This is where
  235. gnatbl finds the list of object files required.
  236.  
  237. The options of gnatbind are summarized below. Normally gnatbind is called
  238. by default from gnatbl. If you want to invoke gnatbind explicitly with some
  239. of the options mentioned below, your invoke gnatbind with the options on the
  240. ali file and then invoke gnatbl with the -linkonly option so that the binder
  241. will not be called again.
  242.  
  243. Usage: gnatbind switches lfile
  244.  
  245.   -b      Generate brief messages to stderr even if verbose mode set
  246.   -c      Check only, no generation of binder output file
  247.   -e      Output complete list of elaboration order dependencies
  248.   -Idir   Specify library and source files search path
  249.   -l      Output chosen elaboration order
  250.   -mnnn   Limit number of detected errors to nnn (1-999)
  251.   -n      No main program
  252.   -o file give the Output name (default is b_xxx.c) 
  253.   -s      Require all source files to be present
  254.   -t      Ignore time stamp errors
  255.   -v      Verbose mode. Error messages,header, summary output to stdout
  256.   -wx     Warning mode. (x=s/e for suppress/treat as error)
  257.   -x      Exclude source files (check object consistency only)
  258.   lfile   Library file names
  259.  
  260. Using gcc to compile.
  261. ---------------------
  262.  
  263. In the usual procedures for using GNAT, Ada source programs are compiled into
  264. object files using the driver program 'gcc' with the option '-c' (compile
  265. only). Gcc recognizes the ada filename extensions .ads and .adb (discussed
  266. more thoroughly below) and calls the actual compiler, 'gnat1' to compile
  267. the source file.  Gcc has many switches which you will need your gcc
  268. documentation to learn about.  In addition, gcc passes gnat1 switches
  269. through to gnat1.  These (with a couple of exceptional abbreviations) are
  270. spelled on the gcc command line by "-gnatXXX".  Thus
  271.  
  272.         gcc -c -gnata foo.adb
  273.  
  274. causes gcc to call the Ada compiler gnat1 with gnat1's '-a' switch; the '-c'
  275. is understood by gcc to mean that it is done after producing the object file
  276. (it won't try to link).  The output of this command is the object and ALI
  277. files for foo.
  278.  
  279. In the future, the gcc and the GNAT-specific switches will be more fully
  280. integrated.  At this time, there is the "-gnatXXX" mechanism for passing
  281. switches through to gnat1.  Some of these switches are described in
  282. specific sections of this document; a more complete discussion is in the
  283. options section below.  Note that gcc passes these switches to gnat1
  284. with the "gnat" prefix, where it is stripped off.  This means that
  285. when gnat1 is executed the "gnat" prefix is required; but in all of the
  286. documentation the switches are described without the prefix.
  287.  
  288. Three gcc options are translated to gnat1 arguments when seen on the gcc
  289. command line.  These are "k8" (file name limit), "83" (Ada83 syntax) and
  290. "w" (warning mode). Thus, the following commands are identical:
  291.  
  292.      gcc -ws -k8 file.adb
  293.      gcc -gnatws -gnatk8 file.adb
  294.  
  295. i.e., both of them suppress warning messages from GNAT, and expect file names
  296. to be 8 characters long at most (see below for usage).
  297.  
  298. In addition, the following gcc switches are passed through and recognized by 
  299. gnat1 with the same effects as in cc1 (as for C files): "-g*" (other than
  300. "-gnat*"); "-O*"; "-p"; "-pg"; "-f*"; "-d*"; "-S".  For example, 
  301.  
  302.       gcc -c -g math.adb
  303.  
  304. will generate debugging information that can be used with the debugger gdb
  305. (see below).
  306.  
  307. The other flags that control gcc itself (notably -B and -c) and the 
  308. assembler, behave as usual. Please consult your GCC documentation for details.
  309.  
  310.  
  311. Using gcc for syntax checking
  312. ------------------------------
  313.  
  314. The current release of GNAT implements the full Ada 95 grammar as described in 
  315. annotated Ada Reference Manual for Ada 95 (AARM, version 5.95). We think the
  316. parser gives excellent error messages (try it and see!) and is pleasantly 
  317. fast (again, try and see!).
  318.  
  319. To run GNAT in syntax checking only mode, use the switch "s",
  320. that is to say, enter the command:
  321.  
  322.     gcc -c -gnats file
  323.  
  324. where file is the name of the file to be checked. (Under Unix, wild cards can
  325. be used to check a set of files, as in *.adb.)  Note that the 'compile only'
  326. flag has to be given for gcc, as well as the 'syntax only' flag, which is
  327. GNAT-specific.  We will remove this redundancy in subsequent releases. 
  328.  
  329. The syntax checker is complete, and quite robust. If you manage
  330. to blow it up, or if it fails to diagnose an error, or lets a syntactically
  331. invalid program through, definitely let us know (see separate section below). 
  332. If you find an error message you think could be improved, let us know as well. 
  333. Of course, no compiler can ever have perfect error messages (that would involve
  334. mind reading), but we are committed to doing as well as possible, so we are
  335. happy to get suggestions in this department.
  336.  
  337. Using gcc for semantics checking
  338. --------------------------------
  339.  
  340. The command to perform semantic checking is:
  341.  
  342.     gcc -c -gnatc file
  343.  
  344. To operate in this mode, since WITH'ed files must be accessed, the GNAT
  345. semantic restrictions on file structuring must be followed:
  346.  
  347.      o    The needed source files must be accessible.  See the section
  348.         below on search paths.
  349.  
  350.      o    Each file must contain only one compilation unit.
  351.     See the section below on file name rules.
  352.  
  353.      o    The file name and unit name must match as described below, under
  354.         File name rules.
  355.  
  356. Note that the use of search paths and the flexibility of the File name
  357. rules will increase in the future as described in the sections on these
  358. facilities.
  359.  
  360. The coverage of semantic checks is still incomplete, and the system
  361. is not very robust in the presence of semantically illegal programs.
  362. Nevertheless, this release supports many more features of Ada 95 than the
  363. previous one, and semantic checking is correspondingly more extensive. 
  364.  
  365. Here, use of the 'report errors immediately' switch ("-e", i.e., "-gnate" on
  366. the gcc command line) will help pinpoint the source of the trouble if the
  367. system misbehaves. 
  368.  
  369. Search paths and the Run Time Library (RTL)
  370. -------------------------------------------
  371.  
  372. With GNAT's source based library system, the compiler must be able to
  373. find source files for units that are needed by the unit being
  374. compiled.  Also, during binding, ALI files are needed to do the
  375. required checking of compilation order and to determine elaboration
  376. requirements.  Both the compiler and binder use search paths to
  377. locate the files that they need. The rules are straightforward.
  378.  
  379. The compiler compiles one source file whose name must be givien explicitly
  380. on the command line (i.e. there is no searching done for this file).  All
  381. other source files that are needed (the most common being the specs of
  382. WITH'ed units) are found by looking in the following directories: 
  383.  
  384.    o The first directory searched is the directory containing the source
  385.      file of the main unit being compiled (the file name on the command
  386.      line). This directory is the current working directory only if the
  387.      input file contains no relative or absolute path
  388.      information. Otherwise if the input file is specified as dir/file
  389.      then the first directory searched is dir.
  390.  
  391.    o Next, the compiler looks in each directory named by a "-I" option
  392.      given to gcc (in the order given on the command line).
  393.  
  394.    o Then the compiler looks in each of the directories listed in the value
  395.      of the ADA_INCLUDE_PATH environment variable.  This value is constructed
  396.      exactly as the PATH environment variable -- a list of directory names
  397.      separated by ':' or ';' (Unix or OS/2, respectively) characters. Under
  398.      OS/2, this mechanism is used to locate the RTL source files in place of
  399.      the default location described next for Unix.
  400.  
  401.    o (Unix only) Finally the compiler looks in the default location for
  402.      the GNAT Run Time Library (RTL) source files that is determined at the
  403.      time that GNAT is built and installed on your system.
  404.  
  405. The compiler outputs its object files and ALI files in the current working
  406. directory (NOTE: the object file can be redirected with the -o option;
  407. however, gcc and gnat1 have not been coordinated on this so the ALI file
  408. will not go to the right place -- DON'T DO THIS).
  409.  
  410. The binder takes the name of an ALI file as its argument and needs to locate
  411. other ALI files in its recursive processing.  These are found in the
  412. following directories:
  413.  
  414.    o First, the current working directory is searched.
  415.  
  416.    o Next, the binder looks in directories named in "-I" options on the 
  417.      gnatbind command line (in the order given).
  418.  
  419.    o Next, the binder looks in each of the directories listed in the value
  420.      of the ADA_OBJECTS_PATH environment variable.  This value is constructed
  421.      exactly as the PATH environment variable -- a list of directory names
  422.      separated by ':' or ';' (Unix or OS/2, respectively) characters. Under
  423.      OS/2, this mechanism is used to locate the RTL object files in place of
  424.      the default location described next for Unix.
  425.  
  426.    o (Unix only) Finally the binder looks in the default location for
  427.      the GNAT Run Time Library (RTL) object files that is determined at the
  428.      time that GNAT is built and installed on your system.
  429.  
  430. If the binder is requested to locate source files (for time stamp
  431. verification) the source files are located using the mechanism for
  432. source files described above, that is the curent working directory is
  433. searched first, then the directories specified with -I, then those in
  434. ADA_INCLUDE_PATH, etc. The only difference being that because no
  435. source file is specified to the binder, the first directory which is
  436. searched for sources is the current working directory.
  437.  
  438. The binder generates the bind file (a C language source file) in the
  439. current working directory.
  440.  
  441. The packages Ada, System, and Interfaces and their children make up the GNAT
  442. Run Time Library, together with the simple System.IO package used in the "Hello
  443. World" example.  The sources for these units are needed by the compiler
  444. and are kept together in one directory (not all of the bodies are needed,
  445. but all of the sources are kept together anyway).  The ALI files and object
  446. files generated by compiling the RTL are needed by the binder and the linker,
  447. and are kept together in one directory (typically different from the
  448. directory containing the sources).  In a normal installation, the user will
  449. not need to specify these directory names when compiling or binding (or
  450. binding and linking with gnatbl -- though the call to the linker contains
  451. explicit pathnames of the object files).  Either the environment variables
  452. (OS/2) or the builtin defaults will cause these files to be found.
  453.  
  454. Besides the assistance in using the RTL, a major use of search paths is
  455. in compiling sources from multiple directories.  This can make development
  456. environments much more flexible.
  457.  
  458. The user might use the search paths to experiment with alternative RTLs, or
  459. to create new libraries (not the technical Ada meaning here).
  460.  
  461.  
  462. Options.
  463. --------
  464.  
  465. Error reporting, as well as other aspects of the behavior of the system,
  466. are controlled by the following flags. All of these must be entered with
  467. the prefix '-gnat'. For example, '-gnatv83' specifies verbose mode for
  468. output, and Ada83 syntax checking. 
  469.  
  470.   a      Assertions enabled. Pragma Assert and Debug to be activated.
  471.   b      Generate brief messages to stderr even if verbose mode set.
  472.   c      Check syntax and semantics only (no code generation attempted)
  473.   e      Error messages generated immediately, not saved up till end
  474.   f      Full errors. Normally only the first error on each line is reported.
  475.   g      GNAT style checks enabled - col alignment, spacing, capitalization.
  476.       See any source file for examples.
  477.   i?      Identifier char set (?=1/2/3/4/8/p/f/n/w) default = i1 (Latin-1)
  478.         1-4 = Latin 1-4, p = IBM PC, f/n = full/no, upper w=wide_character
  479.   j?      Wide character encoding method (?=n/h/u/s/e)
  480.   knnn      Limit file names to k characters (k = krunch)
  481.   l      Output full source listing with embedded error messages
  482.   mnnn      Limit number of detected errors to nnn (1-999)
  483.   n      Inlining of subprograms (apply pragma Inline across units)
  484.   o       Enable integer overflow checking using range checks
  485.   p      Automatic suppression of all run-time checks mentioned in LRM 11.7
  486.   q       Don't quit, try semantics, even if parse errors
  487.   r      Reference manual column layout required
  488.   s      Syntax check only
  489.   t       Tree output file to be generated
  490.   u      List units for this compilation
  491.   v      Verbose mode. Full error output with source lines to stdout.
  492.   w?      Warning mode. s = suppress, e = treat as error
  493.   x?      Cross-reference level and switches (?=1/2/3/4/5/9/b/s)
  494.   z?      Distribution stub generation (r/s for receiver/sender stubs)
  495.   83      Enforce Ada 83 restrictions
  496.   sfile      Source file names (wild cards allowed for multiple files)
  497.  
  498. Some of these options are explained in more detail elsewhere in this document.
  499.  
  500. For first-time users, and for first-compilation attempts, the following mode
  501. of operation is recommended:
  502.  
  503.       gcc -c -gnatc lets_try_this.adb
  504.  
  505.  
  506. gnatmake
  507. --------
  508.  
  509. In the following command line description we use BNF notation. Hence
  510. [X] means zero or one occurrence of X, while {Y} means zero, one or
  511. arbitrarily many occurrences of Y.
  512.  
  513.   gnatmake [-a] [-c] [-f] [-g] {[-Idir] [-Ldir]} [-n] [-q] [-s] [-v] 
  514.            unit_or_file_name
  515.            {[-cargs options] [-bargs options] [-largs options]}
  516.  
  517. The purpose of gnatmake is to automatically determine and (re)compile
  518. the set of Ada sources needed by some ada compilation unit, Unit.  An
  519. ada source needed by Unit is recompiled if its corresponding object
  520. file is obsolete with respect to the current sources.  By default the
  521. bind and link steps are also performed.
  522.  
  523. There are two ways to specify the actual compilation unit:
  524.  
  525.   * By giving the name of the compilation unit (`gnatmake Unit')
  526.     (gnatmake is case insensitive when giving the unit name)
  527.  
  528.   * By giving the name of the source containing it
  529.     ("gnatmake  file.adb" or "gnatmake  file.ads")
  530.  
  531. To decide whether gnatmake needs to recompile a source file, gnatmake
  532. needs to locate other source files as well as the corresponding .ali
  533. file. The search for source files is done in *exactly* the same
  534. fashion as for gcc, whereas the search for .ali files is done
  535. *exactly* like for the binder (both are described in the section on
  536. search paths above). In particular the switch -I is directly available
  537. in gnatmake (see below).
  538.  
  539. All gnatmake output is to stderr.
  540.  
  541. [-a]
  542.    Consider all files. Considers all files in the make process, even
  543.    the GNAT internal system files (for instance the predefined Ada
  544.    library files). By default gnatmake does not check these internal
  545.    files (don't worry this is safe, if there is an installation
  546.    problem this will be caught when gnatmake binds your program).
  547.    You may have to set this switch if you are working on gnat itself.
  548.    For the vast majority of gnatmake users you never need to set this flag.
  549.  
  550. [-c]
  551.    Compile only. Do not perform binding and linking. If the root unit specified
  552.    by unit_or_file_name is not a main unit this is the default. Otherwise
  553.    gnatmake will attempt linking and binding unless you have used "-c".
  554.  
  555. [-f]
  556.    Force recompilations. Recompile all sources even though some object
  557.    files may be up to date but don't recompile predifined units or GNAT
  558.    internal files unless the -a switch is set.
  559.  
  560. [-g]
  561.    Compile with debugging information. Same effect as -cargs -g -largs -g.
  562.    See below for meaning of -cargs & -largs.
  563.  
  564. [-Idir]
  565.    When looking for source or .ali files look also into directory
  566.    "dir". The order in which source or .ali files search is
  567.    undertaken is described in section search paths above. The -I
  568.    switched is passed on to the compiler and the binder automatically
  569.    so you need not type -cargs -Idir -bargs -Idir.  See below for
  570.    the meaning of -cargs & -largs.
  571.  
  572. [-Ldir]
  573.    Add directory "dir" to the list of directories in which gnatbl
  574.    (actually ld) will search for libraries. This is equivalent to
  575.    typing -largs -Ldir.  See below for the meaning of -largs.
  576.  
  577. [-n]
  578.    Don't compile, bind or link. Checks if all objects are up to date.
  579.    If they are "gnatmake -n" reports that no recompilations needed.
  580.    Otherwise "gnatmake -n" stops printing out the full name of the first
  581.    encoutered file that needs to be recompiled. Note that if you specify
  582.    "-n -f" together, gnatmake will return the full name of the main unit.
  583.         
  584. [-q]
  585.    Quiet. Without this flag set the commands carried out by gnatmake are
  586.    displayed. If -q is set, they are not.
  587.  
  588. [-s]
  589.    Smart. Performs smart recompilations. See section on smart gnatmake below.
  590.  
  591. [-v] 
  592.    Verbose. Motivates all (re)compilations (ie gives *one* reason for
  593.    (re)compiling a source file).
  594.  
  595. [-cargs options] 
  596.    Compiler arguments. Without -cargs, gnatmake simply uses "gcc -c"
  597.    to perform compilations. Otherwise gnatmake uses "gcc -c c_opts".
  598.    "c_opts" is a list of parameters. This list includes all the
  599.    options encoutered in the set of "-cargs options" present on the
  600.    gnatmake command line. A given sublist of "-cargs options" is
  601.    terminated upon encounter of another -cargs, -bargs or -largs.
  602.    Note that by default "gnatmake -a" (see flag -a above) compiles all
  603.    GNAT internal files with "gcc -c -gnatg" rather than just "gcc -c".
  604.    
  605. [-bargs options]
  606.    Binder arguments. Without -bargs, gnatmake simply uses "gnatbind
  607.    unit.ali" to bind. Otherwise gnatmake uses "gnatbind b_opts
  608.    unit.ali". "b_opts" is akin to "c_opts" above but is obtained from
  609.    "-bargs options".
  610.  
  611. [-largs options]
  612.    Linker arguments.  Without -largs, gnatmake simply uses "gnatbl
  613.    -linkonly unit.ali" to link. Otherwise gnatmake uses "gnatbl -linkonly
  614.    l_opts unit.ali". "l_opts" is akin to "c_opts" and "b_opts" above but
  615.    is obtained from "-largs options".
  616.  
  617. NOTES:
  618.  
  619. 1. gnatmake examines both an ali file and its corresponding object file
  620. for consistency. If an ali is more recent than its corresponding object,
  621. or the object is missing, the corresponding source will be recompiled.
  622. Note that gnatmake expects an ali and the corresponding object file
  623. to be in the same directory.
  624.  
  625. 2. Instead of typing a "-" in front of every switch you can group
  626. switches. Thus, instead of typing "gnatmake -a -f" you can type
  627. "gnatmake -af" Note, however, that the "-g" switch has to be on its
  628. own to be recognized.
  629.  
  630. 3. If there are no recompilations gnatmake tells you so, unless you've
  631. used -q, in which case gnatmake is silent. Thus when you type
  632. "gnatmake -n -q unit", gnatmake will either return the full path name
  633. of the first file that needs to be recompiled, or it will be silent. Thus
  634. "gnatmake -n -q" can be used as input to further tools.
  635.   
  636. 4. If the user types "gnatmake file.adb" where file.adb is the body 
  637. of a generic unit, then gnatmake will recompile file.adb systematically
  638. because it finds no ali and then will stop. In particular take care that
  639. in this case "gnatmake -n -q file.adb" will always return "file.adb".
  640.  
  641. 5. If you gnatmake a spec that has a body (say "unit.ads") or a sub-unit
  642.    you will get
  643.  
  644.        % gnatmake unit.ads
  645.        gcc -c unit.ads
  646.        No code generated for t1 (spec) in file t1.ads
  647.        gnatmake: *** compilation failed.
  648.  
  649.    The compilation "fails" because specs or sub-units generate no
  650.    code. To avoid the message use the -gnatc flag (semantics only).
  651.  
  652.        % gnatmake unit.ads -cargs -gnatc
  653.        gcc -c -gnatc unit.ads
  654.  
  655. Smart gnatmake
  656. --------------
  657.  
  658. Not implemented yet. Coming to your local ftp site soon.
  659.  
  660.  
  661. Constraint Checking and Pragma Suppress
  662. ---------------------------------------
  663. In the current version there are some checks performed that are mentioned in
  664. the LRM in section 11.7. These are:
  665.  
  666. range checks on signed integer and enumeration types
  667.   (assignment, in parameters and initial values in object declarations)
  668. index checks
  669. access checks
  670.  
  671. Since this is relatively new, there might still be some cases where exceptions
  672. are raised where they shouldn't. To disable constraint checks, compile the
  673. program with the "-gnatp" option. This is equivalent to having Pragma suppress
  674. applied to everything. Gdb can be used to find where the exception was raised.
  675. See the section on  "Using gdb" for further information.
  676.  
  677. Arithmetic Overflow Checking
  678. ----------------------------
  679.  
  680. Compiling with the default options results in code that performs range
  681. checking against constraints (see -gnatp for suppressing such checks).
  682. However, the default mode does not enable checking for arithmetic overflow
  683. and division by zero.
  684.  
  685. If this checking is required, then the -gnato switch should be set. This
  686. causes appropriate additional code to be generated to check for both
  687. overflow and division by zero (resulting in raising Constraint_Error as
  688. required by the Ada semantics).
  689.  
  690. Note that the -gnato switch does not affect the code generated for any
  691. floating-point operations; it applies only to integer operations. For
  692. floating-point, GNAT has Machine_Overflows set to False, and the normal
  693. mode of operation is to generate IEEE NaN and infinite values on overflow
  694. or invalid operations (such as dividing 0.0 by 0.0)
  695.  
  696. The checks generated by -gnato are quite expensive, which is why they
  697. are not the generated by default. This is because GCC does not yet use
  698. specialized hardware features (flags, sticky flags, traps etc.) for the
  699. detection of integer overflow. Eventually we plan to implement more
  700. efficient integer overflow checking in the future.
  701.  
  702. Order of Compilation Issues.
  703. ----------------------------
  704.  
  705. If, in our example, there were a spec for the hello procedure, it would
  706. be contained in the file "hello.ads"; yet this file would not need to be
  707. explicitly compiled.  This is the result of the model we chose to implement
  708. library management. Details of the model can be found in file gnote1. Some of
  709. the unexpected consequences of the model (unexpected from the point of view
  710. of existing Ada compiler systems) are the following: 
  711.  
  712.      o    There is no point in compiling generics or specifications (except for
  713.     package specifications with no bodies), since these are compiled as
  714.     needed by clients. If you do attempt a useless compilation, you will
  715.     get a warning message. It is also useless to compile subunits in this
  716.     mode, since they are compiled as needed by the parent.
  717.  
  718.      o    There are no order of compilation requirements, and performing a
  719.     compilation never obsoletes anything. The only way you can obsolete
  720.     something and require recompilations is if one of the relevant source
  721.     files is modified.
  722.  
  723.      o    There is no library as such, apart from the .ali files, whose format 
  724.     is also described in libfmt.ads. For now, we find it convenient to
  725.     create separate .ali files, but eventually the information therein may
  726.     be incorporated into the object file directly.
  727.  
  728.      o    When you compile a unit, the source files for the specs of all 
  729.     units that it WITH's, all its subunits, and the bodies of any
  730.     generics it instantiates must be around (findable by the search
  731.         paths mechanism described above), or you will get a fatal error
  732.     message.
  733.  
  734. The above may seem surprising. Just to provide one immediate assurance,
  735. all of this does not mean that we are violating Ada's strict consistency 
  736. rules; they are enforced instead by the binder. 
  737.  
  738. File Name Rules
  739. ---------------
  740.  
  741. The current version of GNAT requires that file names match compilation unit
  742. names. The matching rules are as follows:
  743.  
  744.      o    The file name is obtained by replacing dots in the unit name with
  745.     minus signs, and adding a suffix distinguishing bodies and specs.
  746.     The suffix for specs is ".ads" and for bodies is ".adb".
  747.  
  748.     For example, files containing the unit very_long_unit_name would be
  749.         called:
  750.  
  751.         very_long_unit_name.ads
  752.         very_long_unit_name.adb
  753.  
  754.     on systems supporting long file names.
  755.  
  756.      o    When running under systems which permit only short file names,
  757.         (like DOS and OS/2 under FAT) the file name itself needs to be
  758.         crunched to 8 characters. You can always find out the name it expects
  759.     by running gnatk8 or compiling it (since it warns you if it's wrong).
  760.  
  761.         So in DOS or OS/2 under FAT the filenames above would be crunched to:
  762.             velounna.ads
  763.             velounna.adb
  764.  
  765.         (The full details of the crunching algorithm are in source code of
  766.          krunch.ads and krunch.adb)
  767.  
  768.      Under DOS -gnatk8 is the default, so crunching always takes place.
  769.      On all systems the RTL files are all crunched to 8 characters.
  770.  
  771. Gnatk8.
  772. -------
  773.  
  774. As mentioned in the previous section, gnatk8 can be used to find out what
  775. the krunched name of a file should be when using the -k8 (-gnatk8) option.
  776.  
  777. The first argument can now be an Ada name with dots or it can be the Gnat
  778. name of the unit where the dots representing child units or subunit are
  779. replaced by hypens. The only confusion arises if a name ends .ads or
  780. .adb, and we take this to be an extension if there are no other dots in the
  781. name and the whole name is in lower case.
  782.  
  783. The second argument represents the length of the krunched name. The default
  784. without any argument given is 8 characters. A length of zero stands for
  785. unlimited, i.e. no chop except for system files which are always 8.
  786.  
  787. Examples:
  788.    gnatk8 very_long_unit_name.ads       ---->  velounna.ads
  789.    gnatk8 very_long_unit_name.ads 6     ---->  vlunna.ads
  790.    gnatk8 very_long_unit_name.ads 0     ---->  very_long_unit_name.ads
  791.    gnatk8 grandparent-parent-child.ads  ---->  grparchi.ads
  792.    gnatk8 grandparent.parent.child      ---->  grparchi
  793.  
  794. Note:
  795.    gnatk8 grandparent.parent.child.adb  -----> grpachad
  796. Here the .adb at the end is taken as part of the unit name as explained in
  797. one of the preceeding paragraphs above.
  798.  
  799. Compiling Files With Several Compilation Units.
  800. -----------------------------------------------
  801.  
  802. GNAT can only deal with files that contain a single Ada compilation unit.
  803. However, since it is an established style for certain types of programs
  804. to contain more than one compilation in a file, such as in test suites,
  805. a simple utility program, "gnatchop", is provided to preprocess the file
  806. and split it several other files, one for each compilation unit.
  807. gnatchop takes a filename with any extension. This name can basically
  808. be anything.
  809.  
  810. Usage : gnatchop [-k] [-r] [-s] [-w] filename [directory]
  811.  
  812.   k         limit filenames to 8 characters
  813.   r         generate source reference pragmas
  814.   s         generate a compilation script
  815.   w         overwrite existing filenames
  816.   filename  source file
  817.   directory directory to place split files (default is the current directory)
  818.  
  819. For example, assume archive contains package spec part1, package body
  820. part1, package spec part2, package body part2.adb and subprogram part3 in
  821. any sequence.
  822.  
  823. "gnatchop archive" will create five files in the current directory called
  824. part1.ads, part1.adb, part2.ads, part2.adb, part3.adb. The optional directory
  825. argument places all the split files in that directory rather than the current
  826. directory. The directory must already exist otherwise gnatchop will reject it.
  827.  
  828. If at least one of the files to be split already exists, gnatchop will issue a
  829. message and exit unless the -w flag is used to overwrite existing files.
  830.  
  831. The -r flag causes source reference pragmas to be generated at the start of
  832. each file written. These pragmas will cause error message references and
  833. debugging source information to refer back to the original unchopped files.
  834. This is appropriate if you intend to maintain the program in unchopped form.
  835.  
  836. The -s flag generates a script which can be used to compile all the units
  837. contained in the original source file.
  838.  
  839.   Suppose that you wanted to compile all the units contained in a given file
  840.   called "archive" with some specific options like -gnatv, -O2 and -g. The
  841.   gnatchop with -s option will generate a script with the appropriate
  842.   extension depending on the the operating system. Then the script is
  843.   invoked with the options following at the end as given below.
  844.  
  845.   gnatchop -s archive
  846.   In Unix:  sh archive.sh -gnatv -O2 -g 
  847.   In Dos :  archive.bat -gnatv -O2 -g
  848.   In OS/2:  archive.cmd -gnatv -O2 -g
  849.  
  850. The -k flag krunches the names of the units to be 8 characters followed by the
  851. ads or adb extension.
  852.  
  853. Currently, if you want to specify more than one flag, you need to specify
  854. them separately.  For example, if you want to split archive.adb and specify
  855. both the -s and the -w flags, type "gnatchop -s -w archive" instead of
  856. "gnatchop -sw archive". This limitation will be lifted in the near future.
  857.  
  858. Note: gnatchop works fine for the case of a single compilation unit in a
  859. file, and this is useful in dealing with files that do not have names
  860. satisfying the GNAT naming requirements.
  861.  
  862. Cross Reference Tool.
  863. ---------------------
  864.  
  865. The GNAT system provides a standalone tool, gnatf, which allows for
  866. syntax and semantics checking without any code generation. This is
  867. somewhat faster than using "gcc -gnatc". 
  868.  
  869. Note: the standard gnat options that do not concern code generation are
  870.       still available in gnatf. However, they should not be preceeded by
  871.       -gnat, so to do syntax only checking with gnatf, use `gnatf -s file.adb'
  872.       not `gnatf -gnats file.adb'.
  873.  
  874. The real point of gnatf is that it contains a cross reference (xref)
  875. tool.  The goal of the xref tool is:
  876.  
  877.  1. Give precise information about all declared entities
  878.     (where they are defined and where they are used).
  879.     This is particularly useful in the ada emacs mode
  880.     that you will find with the distribution (see Ada Emacs
  881.     Mode below).
  882.  
  883.  2. Emit warnings if an entity is defined but never used or
  884.     a with clause is unnecessary, misplaced or redundant
  885.     (more on this later).
  886.  
  887.  3. In the future this tool will be the backbone of a smart
  888.     recompilation system which should reduce the number of
  889.     recompilations in the event of minor source code
  890.     modifications.
  891.  
  892. Usage : gnatf [-x[1-6]] files
  893.  
  894.   files The list of Ada source files to cross reference.
  895.  
  896. -x[1-6] The -x[1-6] flags control the amount of information given
  897.         by the xref tool. Flags -x1 and -x2 control the level of
  898.         warnings generated. These warnings are output on standard
  899.         error (usually the screen). Flags -x1 and -x2 do not cause
  900.         any cross reference information to be generated.
  901.         Flags -x[345] distribute cross reference information across
  902.         several files. Specifically for each file "f.adb" (resp. "f.ads")
  903.         in the `files' list we create a file "f.xrb" (resp. "f.xrs")
  904.         containing all cross reference information (more on this below).
  905.     Flag -x6 centralizes and stores this information in the single
  906.         file "X.ref".
  907.  
  908. Flags usage:
  909.  
  910.   -x1       Issues warnings for unnecessary, misplaced or redundant
  911.             ``with'' clauses. Specifically, a warning message is
  912.             generated in the following cases:
  913.  
  914.               - A compilation unit which is withed but never used
  915.                 (this works with child library units as well).
  916.  
  917.               - A compilation unit which is withed in a body (resp.
  918.                 subunit) if the same with clause already appears in
  919.                 the spec (resp. spec or body for subunits).
  920.  
  921.               - A compilation unit which is withed within a spec
  922.                 but is used only by the body or a subunit.
  923.  
  924.   -x2       Issues warnings on unused entities, that is entities that
  925.             are declared but never used. Note that we give *no*
  926.             warnings for unreferenced entities like:
  927.  
  928.               - Record fields, since they could be referenced indirectly
  929.                 by an aggregate.
  930.  
  931.               - Enumeration entities, since they could be referenced
  932.                 indirectly by enumeration ranges:
  933.                      for i in Color'First .. Color'Last
  934.  
  935.               - Loop parameters
  936.                     for I in 1 .. 80 loop
  937.                        Put ('x');
  938.                     end loop;
  939.  
  940.   -x[345]   Generate cross-reference information. Flag -x3 gives the most
  941.             succint xref information, -x5 the most comprehensive. Flag -x4
  942.             gives more information than -x3 but not as much as -x5. The
  943.             information given by flags -x3 and -x4 will be used in the smart
  944.             recompilation system currently under development and will
  945.             be described hereafter. Flag -x5 lists all entities defined or
  946.             used in the analyzed compilation units. It gives the source
  947.             location of their definition and all their uses in the analyzed
  948.             units.
  949.  
  950.   -x6       The cross reference output is the same as with -x5 except that
  951.             with -x6 all cross reference information is stored in the single
  952.             file "X.ref" and the entity kind of each cross referenced entity
  953.             is also given.
  954.  
  955. Cross reference information and smart recompilation
  956.  
  957.   The cross reference information gathered by flags -x3 and -x4 is a
  958.   subset of the information specified by flag -x5. The -x[34]
  959.   information is specifically tailored to the smart recompilation system
  960.   currently under development.  When flags -x3 or -x4 are selected, then
  961.   for each compilation unit "Unit" analyzed by the xref tool we gather
  962.   the following information:
  963.  
  964.     * The full graph of the source files directly or indirectly loaded as
  965.       a result of compiling "Unit" along with their time stamp. This graph
  966.       includes the with-ed unit graph rooted at "Unit" but contains also
  967.       other units automatically loaded by gnat during code generation
  968.       (generic bodies, subunits, bodies of inlined subprograms). This graph
  969.       is created only for flags -x[345].
  970.  
  971.     * The list of entities that can be exported from "Unit" to other Ada
  972.       sources along with their line and column of definition and use in
  973.       "Unit".
  974.  
  975.       If "Unit" is a subprogram or package spec, the notion of exported
  976.       entity matches the set of entities listed therein. If "Unit" is a
  977.       package body with no generics or inlined subprograms then no entities
  978.       are exported. In general, however, the set of entities exported from
  979.       "Unit" is the set of entities that are needed across compilation units
  980.       by gnat when generating code. Specifically inlined subprogram bodies
  981.       or generic bodies are always exported since these are inlined at the
  982.       point of use or instantiation. The same happens for subunits, which are
  983.       inlined in the parent unit.
  984.  
  985.       The difference between flags -x3 and -x4 is that -x3 omits all
  986.       generic bodies or inlined subprograms from the exported entities,
  987.       while flag -x4 includes them. Both -x3 and -x4 consider subunits as
  988.       exported entities.
  989.  
  990.       In addition we only consider outermost visible entities to be
  991.       exported. That is a record or enumeration type may be exported but its
  992.       inner fields or enumeration literals are never considered exported
  993.       entities. Likewise for subprogram parameters and discriminants.
  994.  
  995.     * The list of entities *directly* imported by "Unit" from other Ada
  996.       sources, along with their lines and columns where they are used in
  997.       "Unit".
  998.  
  999.       The notion of imported entities falls off the notion of exported
  1000.       entities (what is exported by one unit may be imported by another).
  1001.  
  1002. Cross reference file structure:
  1003.  
  1004.   The xref file is divided into various sections. There is one section
  1005.   for each compilation unit explicitly requested in `files'. We
  1006.   call these units, the RUs, short for requested units.  There is also
  1007.   one section for each AU, short for auxiliary unit, that is, those
  1008.   compilation units that get implicitly loaded by the compiler, but
  1009.   whose compilation has not been explicitly requested by the user.
  1010.   Specs of withed packages are typical auxiliary units.
  1011.  
  1012.   All entities exported by RUs (flags -x3 and -x4) or all entities
  1013.   belonging to RUs (flags -x5 and -x6) appear in the xref file(s).
  1014.  
  1015.   However, only the entities defined in AUs that are imported in RUs
  1016.   appear in the xref file. Their order is the order of declaration in
  1017.   the source files.
  1018.  
  1019.   The sections in the xref referring to RUs and AUs are respectively denoted:
  1020.  
  1021.             %% unit.ad[sb]     for a RU.
  1022.  
  1023.             -- unit.ad[sb]     for an AU.
  1024.  
  1025.   Note: An entitiy defined inside a generic and used through a generic
  1026.   instantiation, is listed under the xref section of the generic unit.
  1027.  
  1028.   Example: Follows a list of files and the corresponding cross reference.
  1029.   ^^^^^^^
  1030.                         test.adb
  1031.                         ^^^^^^^^
  1032.             01  with Part1;  --  unused
  1033.             02  with Part2; use Part2;
  1034.             03  procedure Test is
  1035.             04
  1036.             05     Thing : Number;
  1037.             06     type Client is record
  1038.             07        Number : Integer;
  1039.             08        State  : Boolean;
  1040.             09     end record;
  1041.             10     type Color is (Red, Green);  -- unused
  1042.             11     My_Client : Client;
  1043.             12
  1044.             13  begin
  1045.             14     My_Client.Number := 1;
  1046.             15     My_Client.State  := True;
  1047.             16     Thing := 20;
  1048.             17     Thing := Thing + Thing;
  1049.             18  end;
  1050.                       part1.ads
  1051.                ^^^^^^^^^
  1052.             01  package Part1 is
  1053.             02     type Useless is new Integer;
  1054.             03  end;
  1055.                       part2.ads
  1056.                   ^^^^^^
  1057.             01  package Part2 is
  1058.             02     type Number is new Integer range 1 .. 1000;
  1059.             03     The_Number : constant := 42;
  1060.             04  end;
  1061.  
  1062.   The result of invoking `gnatf -x5 test.adb' is the following
  1063.   (just skim the "test.xrb", explanations follow):
  1064.  
  1065.                     Warnings on stderr (the screen)
  1066.                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  1067.              test.adb:1:06: warning: "Part1" withed but unused.
  1068.              test.adb:3:11: warning: "Test" unused
  1069.              test.adb:10:09: warning: "Color" unused
  1070.  
  1071.                            test.xrb
  1072.                            ^^^^^^^^
  1073.              01 V "SGNAT v1.0      "
  1074.              02 test.adb                941012154746 2 3 
  1075.              03 part1.ads               941012154531 
  1076.              04 part2.ads               941012154620 
  1077.              05 
  1078.              06 %% test.adb
  1079.              07 test 3:11 
  1080.              08 thing 5:4 
  1081.              09  {16:4 17:4 17:13 17:21}
  1082.              10 client 6:9 
  1083.              11  {11:16}
  1084.              12 client.number 7:7 
  1085.              13  {14:14}
  1086.              14 client.state 8:7 
  1087.              15  {15:14}
  1088.              16 color 10:9 
  1089.              17 red 10:19 
  1090.              18 green 10:24 
  1091.              19 my_client 11:4 
  1092.              20  {14:4 15:4}
  1093.              21 
  1094.              22 -- part1.ads
  1095.              23 part1 1:9 
  1096.              24  {1:6}
  1097.              25 
  1098.              26 -- part2.ads
  1099.              27 part2 1:9 
  1100.              28  {2:6 2:17}
  1101.              29 number 2:9 
  1102.              30  {5:14}
  1103.  
  1104.   Explanations:
  1105.   ^^^^^^^^^^^^
  1106.   File "Test" is the only RU (requested unit). AUs (auxiliary
  1107.   units are packages "Part1" and "Part2". First the graph of
  1108.   the loaded units with their time stamps is given
  1109.  
  1110.              02 test.adb                941012154746 2 3 
  1111.              03 part1.ads               941012154531 
  1112.              04 part2.ads               941012154620 
  1113.  
  1114.   Unit "Test" requires the loading of units "Part1" and "Part2"
  1115.   (the second and third units listed in the inclusion graph).
  1116.   Entry:
  1117.              06 %% test.adb
  1118.              07 [...]
  1119.              08 thing 5:4 
  1120.              09  {16:4 17:4 17:13 17:21}
  1121.  
  1122.   means that "Thing" is an entity (a variable) defined in line 5
  1123.   column 4 and used in line 16 column 4, line 17 columns 4, 13 and 21
  1124.   in file "test.adb". 
  1125.  
  1126.   Note that entity "Useless" may be used in units other than "Test"
  1127.   but that information is not contained in the "test.xrb" since "Test"
  1128.   does not use "Useless".
  1129.  
  1130. Implementation of Intrinsic Functions.
  1131. --------------------------------------
  1132. GNAT version 1.79 begins to implement intrinsic functions. In particular,
  1133. the shift functions predefined in Interfaces are now implemented.
  1134.  
  1135. The implementation is quite general. You can define shift operations (i.e.
  1136. one of the five operations, Shift_Left, Shift_Right, Shift_Right_Arithmetic,
  1137. Rotate_Left, Rotate_Right) on any integer type, signed or unsigned, whose
  1138. Size is 8, 16, 32 or 64 bits, and then provide an appropriate pragma Import
  1139. Intrinsic, and everything will work.
  1140.  
  1141. In other words, the package Interfaces is not using any special magic, and
  1142. you can do exactly what it does to make shift operations available for any
  1143. integer types that meet the size criteria (shift operations for wierd-sized
  1144. integers seem too marginal to worry about!)
  1145.  
  1146. Example:
  1147.  
  1148.    type My_Type is new Integer;
  1149.  
  1150.    function Shift_Left (Val : My_Type; Count : Natural) return My_Type;
  1151.    pragma Import (Intrinsic, Shift_Left);
  1152.  
  1153. The exact requirements on the pragma Import are as follows:
  1154.  
  1155.   The function must have one of the five standard names
  1156.  
  1157.   There must be two arguments
  1158.  
  1159.   The first argument can be of any integer type with a size of 8, 16, 32, 64
  1160.   either signed or unsigned.
  1161.  
  1162.   The return type must be the same as the first argument type
  1163.  
  1164.   The second argument (the shift count), can be of any integer type
  1165.  
  1166. Getting Internal Debugging Information.
  1167. ---------------------------------------
  1168.  
  1169. Most compilers have secret internal debugging switches and modes. GNAT is
  1170. no exception, except that nothing about GNAT is secret. A summary and full
  1171. description of all the compiler/binder debug flags can be found in the file
  1172. debug.adb. You will have to get the sources of the compiler to see the full
  1173. detailed effects of these, but feel free to experiment with them.
  1174.  
  1175. The switches that print the source of the program (reconstructed from the
  1176. internal tree) are of general interest, as are the options to print the full
  1177. internal tree, and the entity table (that is to say, the symbol table
  1178. information). 
  1179.  
  1180. When GNAT crashes. 
  1181. ------------------
  1182.  
  1183. There are several things you can do when GNAT does the unexpected while
  1184. compiling your Ada program, such as aborting with a segmentation fault
  1185. or illegal memory access, raising an internal exception, or otherwise
  1186. terminating abnormally. The following lines of action are of course
  1187. palliatives that will become unecessary as the system becomes more complete
  1188. and robust. The following strategies are presented in increasing order of
  1189. difficulty, corresponding to the sophistication of the user, and her
  1190. curiosity about the functioning of the compiler.
  1191.  
  1192.   1. run gcc with the -gnatf and -gnate switches.
  1193.      The 'f' switch causes all errors on a given line to be reported. In
  1194.      its absence, only the first error on a line is displayed. 
  1195.  
  1196.      The 'e' switch causes errors to be displayed as soon as they are 
  1197.      encountered, rather than after compilation is terminated.
  1198.  
  1199. Often this will be enough to identify the construct that produced the crash.
  1200.  
  1201.   2. run gcc with -v (verbose) switch. In this mode, gcc produces ongoing 
  1202.      information about progress of the compilation and in particular the name 
  1203.      of each procedure as it begins to generate code for it. This switch
  1204.      allows you to find which Ada procedure it was compiling when it ran into 
  1205.      a code generation problem. 
  1206.  
  1207.   3. run gcc with the -gnatdc switch. This is a GNAT-specific switch that
  1208.      does for the front-end what -v does for the back-end. The system prints
  1209.      the name of each unit, either compilation unit or nested unit, as it
  1210.      is being analyzed. 
  1211.  
  1212.   4. On systems that have gdb available (like most Unix systems), you can run
  1213.      gdb directly on the gnat1 executable. Gnat1 is the front-end of
  1214.      GNAT, and can be run independently (normally it is just called from gcc).
  1215.      You can use gdb on gnat1 as you would on a C program (but see below for
  1216.      caveats). The "where" command is the first line of attack; the variable
  1217.      "lineno"  (seen by "print lineno") used by the second phase of gnat1
  1218.      and by the gcc back-end, indicates the source line at which the execution
  1219.      stopped, and "input_filename" the name of the source file.
  1220.  
  1221. Using gdb
  1222. ---------
  1223.  
  1224. Gdb awaits modifications to handle Ada properly, and for now can only be
  1225. used as it would be for a c program. (Someone is working on the proper
  1226. extensions, and these will appear in subsequent releases.) In the meantime,
  1227. the following naming conventions will allow you to find the Ada entities
  1228. defined in your program:
  1229.  
  1230. a)  The names of all entities (variables, subprograms, etc.) are converted to
  1231.     lower case. 
  1232.  
  1233. b)  Entities that appear in library package declarations have the name
  1234.     package_name__subprogram_name (Note the two underscores separating 
  1235.     package name from subprogram name). 
  1236.  
  1237. Exceptions can be caught by breaking in the "__gnat_raise" routine and then
  1238. doing a "bt" or "where" command.
  1239.  
  1240. GNAT specific pragmas
  1241. ---------------------
  1242.  
  1243. Full documentation of the GNAT specific pragmas can be found in the GNAT
  1244. source file sem_prag.adb. You need to retrieve the latest source
  1245. distribution to view this file. An exception is made for Source_File_Name
  1246. which is documented here as well.
  1247.  
  1248. pragma Source_File_Name
  1249. -----------------------
  1250.  
  1251. The source file name pragma allows a program to override the normal
  1252. naming convention. It is a configuration pragma, and so has the usual
  1253. applicability of configuration pragmas (i.e. it applies to either an
  1254. entire partition, or to all units in a compilation, or to a single
  1255. unit, depending on how it is used. The form of the pragma is:
  1256.  
  1257. pragma Source_File_Name (
  1258.     [UNIT_NAME =>] unit_NAME,
  1259.     [BODY_FILE_NAME | SPEC_FILE_NAME] => STRING_LITERAL)
  1260.  
  1261. The given unit name is mapped to the given file name. The identifier
  1262. for the second argument is required, and indicates whether this is
  1263. the file name for the spec or for the body.
  1264.  
  1265. Any number of Source_File_Name pragmas can be put in a file called
  1266. gnat.adc and will apply to compilations in the current directory.
  1267.  
  1268. Unless the extension of the filename is ".ads", ".adb", or ".ada",
  1269. you must prefix the filename with "-x ada" on the gcc command you
  1270. use to compile it.  That prefix applies to all subsequent filenames
  1271. on the command unless you disable it with "-x none".
  1272.  
  1273. PERFORMANCE CONSIDERATIONS
  1274. --------------------------
  1275.  
  1276. The GNAT system provides a number of options that allow a trade off between
  1277.  
  1278.    o  performance of the generated code
  1279.    o  speed of compilation
  1280.    o  minimization of dependencies and recompilation
  1281.    o  degree of runtime checking
  1282.  
  1283. The defaults if no options are selected are aimed at improving the speed
  1284. of compilation and minimizing dependences at the expense of performance
  1285. of the generated code:
  1286.  
  1287.    o  no optimization
  1288.    o  no inlining of subprogram calls
  1289.    o  all runtime checks enabled except overflow and elaboration checks
  1290.  
  1291. These options are suitable for most program development purposes. This
  1292. section of the documentation describes how these options can be modified.
  1293.  
  1294. Runtime Checks
  1295. --------------
  1296.  
  1297. The default is to include all runtime checks except arithmetic overflow
  1298. checking for integer operations (including division by zero), and checks
  1299. for access before elaboration on subprogram calls.
  1300.  
  1301. Two gcc switches allow this default to be modified:
  1302.  
  1303.   -gnatp     
  1304.  
  1305.     This switch suppresses all runtime checks. This will improve the
  1306.     performance of the code at the expense of safety in the presence
  1307.     of invalid data or program bugs.
  1308.  
  1309.   -gnato
  1310.  
  1311.     This switch enables overflow checking for integer operations and checks
  1312.     for access before elaboration on subprogram calls. This will generate
  1313.     slower and larger executable programs.
  1314.  
  1315. Our experience is that the default is suitable for most development purposes.
  1316. The reason that we treat integer overflow and elaboration checks specially is
  1317. that these are quite expensive, and in our experience are not so important as
  1318. other runtime checks in the development process. 
  1319.  
  1320. Note that the setting of the switches controls the default setting of the
  1321. checks. They may be modified using either Suppress (to remove checks) or
  1322. Unsuppress (to add back suppressed checks) pragmas in the program source.
  1323.  
  1324. Optimization Levels
  1325. -------------------
  1326.  
  1327. The default is optimization off. This results in the fastest compile times,
  1328. but GNAT makes absolutely no attempt to optimize, and the generated programs
  1329. are considerably larger and slower. The switch
  1330.  
  1331.    -On
  1332.  
  1333. where n is an integer from 0 to 3, can be used on the GCC command to control
  1334. the optimization level:
  1335.  
  1336.    -O0    no optimization (the default)
  1337.  
  1338.    -O1    medium level optimization
  1339.  
  1340.    -O2    full optimization
  1341.  
  1342.    -O3    full optimization, and also attempt automatic inlining of small
  1343.           subprograms within a unit (see next section for further details).
  1344.  
  1345. The penalty in compilation time, and the improvement in execution time, both
  1346. depend on the particular application and the hardware environment. You should
  1347. experiment to find the best level for your application.
  1348.  
  1349. Note: unlike the case with some other compiler systems, GCC has been tested
  1350. extensively at all optimization levels. There are some bugs which appear only
  1351. with optimization turned on, but there have also been bugs which show up only
  1352. in unoptimized code. Selecting a lower level of optimization does not improve
  1353. the reliability of the code generator, which in practice is highly reliable
  1354. at all optimization levels.
  1355.  
  1356. Inlining of Subprograms
  1357. -----------------------
  1358.  
  1359. A call to a subprogram in the current unit is inlined if all the following
  1360. conditions are met:
  1361.  
  1362.     o  The optimization level is at least -O1
  1363.  
  1364.     o  The called subprogram is suitable for inlining. It must be
  1365.        small enough and not contain nested subprograms or anything
  1366.        else that GCC cannot support in inlined subprograms.
  1367.  
  1368.     o  The call occurs after the definition of the body of the subprogram.
  1369.  
  1370.     o  Either pragma Inline applies to the subprogram, or it is very small
  1371.        and automatic inlining (optimization level -O3) is specified.
  1372.  
  1373. Calls to subprograms in with'ed units are normally not inlined. To achieve
  1374. this level of inlining, the following conditions must be true.
  1375.  
  1376.     o  The optimization level is at least -O1
  1377.  
  1378.     o  The called subprogram is suitable for inlining. It must be
  1379.        small enough and not contain nested subprograms or anything
  1380.        else that GCC cannot support in inlined subprograms.
  1381.  
  1382.     o  The call appears in a body (not in a package spec).
  1383.  
  1384.     o  There is a pragma Inline for the subprogram
  1385.  
  1386.     o  The -gnatn switch is used in the GCC command line
  1387.  
  1388. Note that specifying the -gnatn switch causes additional compilation
  1389. dependencies. Consider the following:
  1390.  
  1391.  
  1392.    package R is
  1393.      procedure Q;
  1394.      pragma Inline Q;
  1395.    end R;
  1396.  
  1397.    package body R is
  1398.      ...
  1399.    end R;
  1400.  
  1401.    with R;
  1402.    procedure Main is
  1403.    begin
  1404.      ...
  1405.      R.Q;
  1406.    end Main;
  1407.  
  1408. With the default behavior (no -gnatn switch specified), the compilation of
  1409. the Main procedure depends only on its own source, main.adb, and the spec
  1410. of the package in file r.ads. This means that editing the body of R does
  1411. not require recompiling Main.
  1412.  
  1413. On the other hand, the call R.Q is not inlined under these circumstances. If
  1414. the -gnatn switch is present when Main is compiled, then the call will be
  1415. inlined if the body of Q is small enough, but now Main depends on the body
  1416. of R in r.adb as well as the spec. This means that if the body is edited,
  1417. then the main program must be recompiled. Note that this extra dependency
  1418. occurs whether or not the call is in fact inlined by GCC.
  1419.  
  1420. Note: the GCC switch -fno-inline can be used to prevent all inlining. This
  1421. switch overrides all other conditions, and ensures that no inlining occurs.
  1422. The extra dependencies resulting from -gnatn will still be active, even if
  1423. the -fno-inline switch is used.
  1424.  
  1425. New WARNING messages related to accessibility checks and private packages
  1426. -------------------------------------------------------------------------
  1427. GNAT version 2.05 implements two new checks that we anticipate will cause
  1428. some problems to existing programs.
  1429.  
  1430. First, static accessibility checks are implemented. These catch two common
  1431. errors:
  1432.  
  1433.    Improper use of 'Access attribute. These can usually be "corrected" by
  1434.    the use of 'Unchecked_Access in the variable case, but good Ada style
  1435.    says that the use of 'Unchecked_Access should be restricted, just like
  1436.    the use of Unchecked_Conversion. Unchecked_Access can lead to dangling
  1437.    pointers, and at the least careful analysis is needed.
  1438.  
  1439.    The invalid use of 'Access for subprograms is harder to fix in a
  1440.    "legitimate" manner. GNAT provides the 'Unrestricted_Access attribute
  1441.    that can be applied to subprograms in defiance of the accessibility
  1442.    rules (e.g. to create downward closures), but this attribute is not
  1443.    portable, and, as described by Bob Duff "naughty". So think twice at
  1444.    least before casually "fixing" your problem this way. Dangling
  1445.    subprogram pointers are particularly unpleasant. Another alternative
  1446.    is to use a generic, and pass the subprogram as a generic formal
  1447.    subprogram.
  1448.  
  1449.    The other common error is the derivation of a tagged type at a deeper
  1450.    nesting level than the parent type. This is also illegal (because it
  1451.    could cause dangling hidden subprogram pointers in dispatch tables).
  1452.    GNAT is not about to provide a way around this error, you must
  1453.    restructure your program. The simplest approach is to define all
  1454.    tagged types at the library level.
  1455.  
  1456.    Note in particular that all controlled types are derived from library
  1457.    level types, and so can only be declared at the library level. This is
  1458.    such a common case, that we have special-cased the error message.
  1459.  
  1460. The second new check is for the (mis)use of private packages. This caused
  1461. some unwelcome surprises in the GNAT code itself. Again, the only proper
  1462. remedy is to restructure (or possibly reconsider the use of private
  1463. packages). The critical rule is that specs cannot with a private package
  1464. unless they are themselves private.
  1465.  
  1466. We are thinking of introducing a pragma that would provide some protection
  1467. for withing packages that are not intended to be public, but are needed in
  1468. specs, stay tuned!
  1469.  
  1470. Meanwhile, in version 2.05, these error messages are warnings, but take care,
  1471. they are really illegalities, and in 2.06 they will be changed to be error
  1472. messages instead of warnings, so you have one version to clean up your act
  1473. with respect to accessibility and private packages!
  1474.  
  1475. Features supported/unsupported
  1476. ------------------------------
  1477. A full listing of features supported/unsupported is available separately in
  1478. the file "features" included in the distribution. Note that this usually
  1479. changes with each distribution, so read often.
  1480.  
  1481. Files.
  1482. ------
  1483.  
  1484. If you want to examine the workings of the GNAT system, the following
  1485. haiku-like description of its organization might be of minimal use:
  1486.  
  1487. File with prefix "sc" contain the lexical scanner.
  1488.  
  1489. All files prefixed with "par" are components of the parser. The numbers 
  1490. correspond to chapters of the Ada 83 LRM (or the corresponding sections of 
  1491. the Ada 95 LRM).  For example, parsing of select statements can be found 
  1492. in par-ch9.
  1493.  
  1494. All files prefixed with "sem" perform semantic analysis. Same numbering scheme.
  1495. For example, all issues involving context clauses can be found in sem_ch10.
  1496.  
  1497. All files prefixed with "exp" perform AST normalization and expansion. 
  1498. For example, the construction of record initialization procedures is 
  1499. done in exp_ch3.
  1500.  
  1501. The files prefixed with "bind" implement the binder, which verifies the
  1502. consistency of the compilation, determines an order of elaboration, and
  1503. generates the bind file.
  1504.  
  1505. The file atree details the low-level data structures used by the front-end.
  1506. The file sinfo details the structure of the AST as produced by the parser.
  1507. The file einfo details the attributes of all entities, computed during
  1508. semantic analysis.
  1509.  
  1510. Library management issues are dealt with in files with prefix "lib".
  1511.  
  1512. Files with prefix a- are GNAT-specific C files. They are the components of
  1513. Gigi (gnat-to-gnu), the program that translates the Ada AST into gcc tree 
  1514. fragments. Gigi makes use of C versions of atree, einfo and sinfo, called 
  1515. a-atree.[ch], a-einfo.[ch] and a-sinfo.h respectively.
  1516.  
  1517. All the other .c files are modifications of common GCC files. 
  1518.  
  1519. Happy browsing!
  1520.  
  1521. Ada Mode for Emacs
  1522. ------------------
  1523.  
  1524. In the subdirectory `emacs-ada-mode' you will find a bunch of files
  1525. implementing an Ada mode under Gnu emacs. The mode is still under
  1526. development, but a number of features are complete. For instance, the
  1527. Ada mode has the same indenting friendliness that C programmers get
  1528. with the c-mode, you can toggle between spec and body with a few
  1529. keystrokes, etc. This mode also uses gnatf to be able to point to an
  1530. entity with the mouse, click it and open a window with its definition.
  1531. This mode is copywrited by Markus Heritsch and Rolf Ebert.
  1532.  
  1533. Copyright Considerations
  1534. ------------------------
  1535.  
  1536. Everything is copyrighted using the GNU public license. This means that you
  1537. can copy everything freely, but you can't incorporate the code directly
  1538. into a commercial program. For more information on the GNU license,
  1539. see the file header. One important note is that it is possible to use
  1540. GNAT to generate software that is not itself covered by the GNU license.
  1541. This is because all library and runtime units are covered by a modified
  1542. version of the GPL which explicitly permits this use.
  1543.  
  1544. Submitting Bug Reports
  1545. ======================
  1546.  
  1547. We welcome bug reports, they are of course a vital part of the process of
  1548. getting GNAT into solid shape. You will help us (and make it more likely
  1549. that you receive a timely response) if you follow these guidelines. We
  1550. try to process all bug reports from both users supported by Ada Core
  1551. Technologies, and from unsupported users. Naturally supported users have
  1552. our priority attention, so we cannot guarantee any specific response for
  1553. unsupported users.
  1554.  
  1555. We only receive bug reports by internet, addressed to report@gnat.com.
  1556. At the moment we cannot process bug reports from any other source.
  1557.  
  1558. Note: if you believe you have found a GCC (C language or configuration
  1559. file) bug rather than an GNAT (Ada language) bug please report it to
  1560. bug-gcc@prep.ai.mit.edu.  If you have found a bug when using GCC to
  1561. compile C++, please report it to bug-g++@prep.ai.mit.edu.
  1562.  
  1563. Please put one bug in a message, and add a short but specific subject (a
  1564. general subject like "GNAT bug" is not so useful, a title like "bug in
  1565. visibility with generics" is more useful).
  1566.  
  1567. Please include full sources. We can't duplicate errors without the full
  1568. sources. Include all sources in the single email message with appropriate
  1569. indications in the multiple file cases, see below.
  1570.  
  1571. Please send all sources in plain ASCII form, we can't process compressed,
  1572. uuencoded etc. messages in our current form (they have to go through extra
  1573. steps, and easily get lost, separated from the author etc during this process).
  1574.  
  1575. Please include COMPLETE identification of the version of the system you are
  1576. running.
  1577.  
  1578. To be maximally helpful, for a report that contains multiple separate
  1579. compilation units, and hence multiple files, submit them in the form of
  1580. a single file that is acceptable input to gnatchop (used to be called gnatsplit
  1581. on versions of GNAT prior to 1.80), i.e. contains no non-Ada text. If you use
  1582. banners to separate the files, make sure they are composed entirely of blank
  1583. lines or Ada comments.
  1584.  
  1585. If you want to be maximally helpful, try to reduce your example to a simple one
  1586. but DON'T spend too much time doing this. Especially when you are reporting
  1587. a blow up during compilation, rather than bad code generated, we can in 
  1588. practice work with big sources if you have trouble narrowing things down.
  1589.  
  1590. If a bug involves incorrect operation of the generated code, then the first
  1591. thing the program should do is to output a line indicating the expected
  1592. output or behavior. If at all possible, do a test later on that prints
  1593. out "passed" or "failed" depending on the behavior. Of course it may not
  1594. always be possible to structure a test this way, but that's the most 
  1595. convenient form (for obvious reasons!)
  1596.  
  1597. When we receive a bug report, we take a preliminary look to categorize it
  1598. into one of the following:
  1599.  
  1600.    1.  Pilot error, documentation problems, installation problems etc.
  1601.  
  1602.    2.  Interesting comment, suggestion etc, but not a bug
  1603.  
  1604.    3.  Bug that we already know about
  1605.  
  1606.    4.  Bug that is already fixed in our development version
  1607.  
  1608.    5.  Obvious bug that we correct immediately in our development version
  1609.  
  1610.    6.  Real genuine new unfixed bug.
  1611.  
  1612. In the first 5 cases, you will get a message telling you the status. In the
  1613. 6th case only, we assign a bug tracking number of the form mmdd-nnn, where
  1614. mmdd is the date of receipt, and nnn is a serial number (highest value so
  1615. far 005, but you never know!) In this case, the release notes will tell you
  1616. what the status of the bug is, and also we will send you a message when it
  1617. is fixed.
  1618.  
  1619. To send reports to us on the system, or ask questions, send messages to
  1620.  
  1621.     report@gnat.com
  1622.  
  1623. To contact team members, send messages to:
  1624.  
  1625.     banner@gnat.com
  1626.     comar@gnat.com
  1627.     cruz@gnat.com
  1628.     dewar@gnat.com
  1629.     dismukes@gnat.com
  1630.     kenner@gnat.com
  1631.     rupp@gnat.com
  1632.     schenker@gnat.com
  1633.     schonberg@gnat.com
  1634.  
  1635. or visit our home page at http://www.gnat.com
  1636.  
  1637. To obtain electronically the latest version of the system, FTP from:
  1638.  
  1639.     cs.nyu.edu (directory pub/gnat)
  1640.  
  1641. This FTP directory also includes full sources for the system, full
  1642. documentation and technical notes, as well as executables of the system
  1643. for several targets. We are sorry that our limited resources do not allow
  1644. us to distribute the system through other media.
  1645.  
  1646. We trust that this information will be mirrored at other FTP sites around 
  1647. the world (we encourage such mirroring to occur), which will make it easier
  1648. for users in other continents to obtain the GNAT system without heavy
  1649. communication uncertainties.
  1650.  
  1651. Schedule.
  1652. ---------
  1653. We will make available new releases of GNAT at around 5 or 6 week intervals
  1654. for the time being. Please recall that releases of the system are still only
  1655. snapshots of work in progress. We hope that it will be of some use in the
  1656. work of others, even in its current embryonic form. 
  1657.  
  1658. A short gnat paper
  1659. ------------------
  1660. A TeX file of a short paper describing something about the GNAT project is
  1661. included under the name gnatdoc1.tex.
  1662.  
  1663. Ada Information Resources On the Internet
  1664. ---------------------------------------
  1665. There is a wealth of Ada-related information available on the Internet.
  1666. The simplest way to access it is via a World Wide Web (WWW) browser
  1667. such as Mosaic or Netscape. Start up your browser and "open"
  1668. the following URLs that interest you:
  1669.  
  1670. http://www.gnat.com
  1671.   The home page of Ada Core Technologies, the maintainers of GNAT
  1672.  
  1673. http://lglwww.epfl.ch/Ada/
  1674.   The Ada WWW server in Lausanne, Switzerland; this server has
  1675.   a wealth of Ada-related information.
  1676.  
  1677. http://lglwww.epfl.ch/Ada/FAQ/comp-lang-ada.html
  1678.   Ada frequently-asked questions (FAQs).
  1679.  
  1680. http://lglwww.epfl.ch/Ada/Tutorials/Lovelace/lovelace.html
  1681.   Lovelace, a free interactive Ada 95 tutorial.
  1682.  
  1683. http://lglwww.epfl.ch/Ada/Resources/Books/Textbooks.html
  1684.   An annotated list of Ada-oriented textbooks.
  1685.  
  1686. http://wuarchive.wustl.edu/languages/ada/
  1687.   The Public Ada Library (PAL); this contains lots of software.
  1688.  
  1689. http://sw-eng.falls-church.va.us/
  1690.   The Ada Information Clearinghouse.
  1691.  
  1692. http://www.acm.org/sigada/
  1693.   The Association for Computing Machinery (ACM)'s SIGAda home page.
  1694.  
  1695. There is also a newsgroup, comp.lang.ada, specifically
  1696. dedicated to Ada.
  1697.